// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.sns_friend;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

import com.eva.android.widget.DataLoadableActivity;
import com.eva.android.ToolKits;
import com.eva.epc.common.util.CommonUtils;
import com.eva.framework.dto.DataFromServer;
import com.x52im.rbchat.MyApplication;
import com.x52im.rbchat.R;
import com.x52im.rbchat.logic.more.MyFragment;
import com.x52im.rbchat.logic.more.UserActivity;
import com.x52im.rbchat.network.http.async.QueryFriendInfo;
import com.x52im.rainbowchat.http.logic.dto.RosterElementEntity;
import com.x52im.rbchat.utils.IntentFactory;

import java.text.MessageFormat;

/**
 * 查找好友功能主Activity.
 * <p>
 * 内有两个Tab：可进行”随机查找”、“精确查找”的界面切换。
 * <p>
 * <p>
 * <b>关于“随机查找”好友的说明：</b><br>
 * 这个功能其实是参考QQ的查找好友功能来做的，“随机”可以给这种陌生人交友带来新鲜感，
 * 试想，一个传统的“查找所有线上好友”的界面里，每次点进来第一页都是之前看过的人，就
 * 太乏味了！<br>
 * UI界面上可以仿照早期的qq随机查找好友方式：在结果页面上加一个“换一批”，每点一次都是
 * 一个随机结果，这就有意思、有意义多了。
 * 
 * @author Jason
 * @version 1.0
 */
public class FindFriendFormActivity extends DataLoadableActivity 
{
	private ViewGroup randomSearchLL = null;
	
	private ViewGroup strictSearchLL = null;
	
	private RadioButton randomSearchRadio = null;
	private RadioButton strictSearchRadio = null;
	
	private RadioButton randomStatusALLRadio = null; 
	private RadioButton randomOnlineRadio = null;
	private RadioButton randomOfflineRadio = null;
	
	private RadioButton randomSexALLRadio = null;
	private RadioButton randomMaleRadio = null;
	private RadioButton randomFemaleRadio = null;
	
	private EditText uidEditText = null;
	
	private Button searchBtn = null;
	
	/**
	 * 本方法由父类的onCreate()调用，子类可在此方法中实现自已的UI显示逻辑。
	 */
	@Override
	protected void initViews(Bundle savedInstanceState)
	{
		// 设定自定义标题栏（设定此值即意味着开启自定义标题栏的使用，必须要在setContentView前设定）
		customeTitleBarResId = R.id.sns_add_friend_form_random_titleBar;
		// 养成良好习惯：首先设置主layout，确保后绪的操作中使用到的组件都可以被find到
		setContentView(R.layout.sns_find_friend_form_all_v9);
		
		randomSearchLL = (ViewGroup)findViewById(R.id.sns_add_friend_form_random_search_LL);
		strictSearchLL = (ViewGroup)findViewById(R.id.sns_add_friend_form_strict_search_LL);
		
		randomSearchRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_radio);
		strictSearchRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_strict_search_radio);
		
		randomStatusALLRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_isonline_all_radio);
		randomOnlineRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_online_radio);
		randomOfflineRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_offline_radio);
		
		randomSexALLRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_gender_all_radio);
		randomMaleRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_male_radio);
		randomFemaleRadio = (RadioButton) findViewById(R.id.sns_add_friend_form_random_search_female_radio);
		
		uidEditText = (EditText) findViewById(R.id.sns_add_friend_form_strict_uidEdit);
		
		searchBtn = (Button)findViewById(R.id.sns_add_friend_form_search_btn);
		
		// 设置标题
		setTitle(R.string.sns_find_firend_form_title);	
		//
		this.setLoadDataOnCreate(false);
		
		// 提示用户当前最多好以拥有多少个好友
		RosterElementEntity local = MyApplication.getInstance(this).getIMClientManager().getLocalUserInfo();
		((TextView)findViewById(R.id.sns_add_friend_form_random_hintView))
			.setText(MessageFormat.format($$(R.string.sns_find_firend_form_random_search_hint)
				, local==null?"1":local.getMaxFriend()));
	}
	
	/**
	 * 本方法由父类的onCreate()调用，子类可在此方法中为各UI功能组件增加事件临听。
	 */
	@Override
	protected void initListeners()
	{
		randomSearchRadio.setOnCheckedChangeListener((buttonView, isChecked) -> {
			if(isChecked) {
				randomSearchLL.setVisibility(View.VISIBLE);
				strictSearchLL.setVisibility(View.GONE);
				// 尝试关闭输入法（如果输入法已开启，无条件关闭之）
				ToolKits.hideInputMethod(self(), uidEditText);
			}
		});
		
		strictSearchRadio.setOnCheckedChangeListener((buttonView, isChecked) -> {
			if(isChecked) {
				randomSearchLL.setVisibility(View.GONE);
				strictSearchLL.setVisibility(View.VISIBLE);
				// 文本框获得焦点
				uidEditText.requestFocus();
			}
		});
		
		searchBtn.setOnClickListener(v -> {
			// 当前功能是“随机查找”
			if(randomSearchRadio.isChecked()) {
				// 随机查找好友
				FindFriendFormActivity.this.startActivity(IntentFactory.createFriendInfoListIntent(
						FindFriendFormActivity.this
						, randomStatusALLRadio.isChecked() ? "-1" : randomOnlineRadio.isChecked() ? "1" : "0"
						, randomSexALLRadio.isChecked() ? "-1" : randomMaleRadio.isChecked() ? "1" : "0"
				));
			}
			// 当前功能是“精确查找”
			else if(strictSearchRadio.isChecked()) {
				String idOrMail = String.valueOf(uidEditText.getText()).trim();
				if(CommonUtils.isStringEmpty(idOrMail))
				{
					uidEditText.setError($$(R.string.sns_find_firend_form_check_text_empty));
					return;
				}
				else
				{
					//不是数字或邮件
					if(!idOrMail.matches("^[0-9_]+$") && !ToolKits.isEmail(idOrMail))
					{
						uidEditText.setError($$(R.string.sns_find_firend_form_check_mail_format));
						return;
					}
				}

				// 查找好友信息（并进入个人信息的UI显示界面）
				boolean useMail = ToolKits.isEmail(idOrMail); // true表示当前使用mail查找，否则使用UI（不是mail那就是uid）
				// 如果输入的是本地用户uid，就直接跳转到本地用户中心
				if(MyApplication.getInstance2().getIMClientManager().isLocalUser(idOrMail)){
					Intent intent = new Intent(self(), UserActivity.class);
					self().startActivityForResult(intent, MyFragment.REQUEST_CODE_FOR_GO_TO_USER$ACTIVITY);
					return;
				}
				new QueryFriendInfo(FindFriendFormActivity.this).execute(useMail, useMail?idOrMail:"", useMail?"":idOrMail);
			}
		});
	}
	
	/**
	 * 从服务端查询数据并返回.
	 * 
	 * @param params loadData中传进来的参数，本类中该参数没有被用到
	 */
	// 本类中屏蔽掉父类中的此方法，因为不需要默认的loadData方法来加载数据
	@Override protected DataFromServer queryData(String... params)
	{
		return null;
	}
	// 本类中屏蔽掉父类中的此方法，因为不需要默认的loadData方法来加载数据并显示到UI上
	@Override protected void refreshToView(Object dateToView)
	{
	}	
}
